/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
	//  判空
	if (!s) {
		return -1;
	}
	// 定义map用来保存右界限符号所对应的下标
	let map = new Map();
	// 定义左右窗口,初始化为最左端
	let left = 0, right = 0;
	let res = 0;
	while (left < s.length && right < s.length) {
		// 首先检查右端点是否存在，更新左端点
		if (map.has(s[right]) && map.get(s[right]) >= left) {
			// 左端点更新为上一次出现的右端点符号的右边一位
			left = map.get(s[right]) + 1;
		}
		// 更新结果
		res = Math.max(right - left + 1, res);
		// 更新map,r如果s[right]出现过则覆盖为最新的值，没有出现过则对其进行设置
		map.set(s[right], right);
		right++;
	}
	return res;
};
console.log(lengthOfLongestSubstring('abcabcbb'))